const ws = require('nodejs-websocket')

// 当前连接的总用户数量
let count = 0

const TYPE_LEAVE = -1
const TYPE_MSG = 0
const TYPE_ENTER = 1

/**
 * 封装消息
 * type : 消息类型. -1 : 离开聊天室 ; 0 : 聊天消息; 1 : 进入聊天室
 * msg : 消息内容
 * time : 消息时间
 */

// 每个连接到服务器的用户都有一个 conn
const server = ws.createServer(conn => {
	console.log('新的连接')
	count++
	conn.userName = `用户${count}`

	// 广播 : 有新用户加入了聊天室
	broadcast(server, {
		type : TYPE_ENTER,
		msg : `${conn.userName}进入了聊天室`,
		time : new Date().toLocaleTimeString()
	})

	// 接收到了浏览器的数据
	conn.on('text', data => {
		// 当接收到某个用户的信息时, 广播给所有用户
		broadcast(server, {
			type : TYPE_MSG,
			msg : data,
			time : new Date().toLocaleTimeString()
		})
	})

	// 关闭连接
	conn.on('close', data => {
		console.log('关闭连接')
		count--
		// 广播 : 有人离开聊天室
		broadcast(server, {
			type : TYPE_LEAVE,
			msg : `${conn.userName}离开了聊天室`,
			time : new Date().toLocaleTimeString()
		})
	})

	// 发生异常
	conn.on('error', data => {
		console.log('发生异常')
	})
})

function broadcast(server, msg) {
	server.connections.forEach(item => {
		item.send(JSON.stringify(msg))
	})
}

server.listen(3000, () => {
	console.log('监听端口 3000')
})
